The Hypertext Transfer Protocol (HTTP) is the primary application layer network protocol used to connect clients with servers over the Internet. While “Web browsers” are the most common client-side software using HTTP to communicate with “Web servers,” other client-side apps/applications and server-side applications/services may exchange messages via HTTP.
HTTP is a request-response protocol meaning that an HTTP “message” consists of a request message sent from a client to a server and a response message transmitted from the server to the client, typically containing data requested by the client. The HTTP server may include various back-end components for performing functions required to complete the response. These may include, for example, databases, image/video processing components (potentially using a hardware accelerator for processing images), audio processing components, and compression components, to name a few. Of course, the particular set of back-end components used will depend on the services offered to clients by the Web server.
A typical HTTP request includes an indication of the command to be implemented by the Web server, one or more request-header fields, and (potentially) a message body. A request-header field allows the client to pass additional information related to the request to the server, acting as a request modifier, with semantics equivalent to the parameters of a method invocation of a programming language. Significantly, there are no limits on the size or type of program code which may be embedded within an HTTP request header.
“Micro-services” are a relatively new architecture. In contrast to monolithic designs, which often run on a single, powerful server, micro-services encourage a loosely-coupled design, where a micro-service does just one thing, but does it efficiently and interacts with other micro-services as needed. A micro-service may utilize specialized hardware and software to perform its function extremely efficiently. Moreover, the micro-services architecture allows an application to be decomposed into different smaller services, improving modularity and making the program code easier to understand, design and test. For example, individual micro-services may be modified (e.g., upgraded, swapped out) without affecting the operation of other micro-services used by the application.
However, the existing HTTP processing methods implemented by Web servers do not fit well within the micro-services model, thereby inhibiting the use of micro-services on current platforms. Most requests served by HTTP servers make it hard for it to be specialized. Current HTTP application servers are large, monolithic machines, performing the bulk of data processing to generate a response, and supplying the data and multimedia requested by the client. This makes low-latency and real-time services based on HTTP difficult to implement.